package com.jinher.lib
{
	import flash.display.Screen;
	import flash.filesystem.*;
	import flash.geom.Rectangle;
	import flash.utils.ByteArray;
	
	import mx.utils.Base64Decoder;
	import mx.utils.Base64Encoder;

	/**
	* 创建人：王曙光
	* 创建时间：2011-10-14
	* 功能描述：系统常用工具封装，静态调用
	*/
	public final class Common
	{
		/**
		 * base64编码，utf-8支持中文
		 */
		public static function b64Encoder(orgin:String):String
		{
			var base64:Base64Encoder=new Base64Encoder();
			//UTF-8编码，支持中文
			base64.encodeUTFBytes(orgin);
			//base64.encode(orgin);
			//输出结果
			return base64.toString();
		}

		/**
		 * base64解码，返回ByteArray
		 */
		public static function b64Decoder(orgin:String):ByteArray
		{
			var base64:Base64Decoder=new Base64Decoder();
			base64.decode(orgin);
			return base64.toByteArray();
		}

		/**
		 * 功能说明：过滤重复字符串
		 * 使用说明：...abc,def,abc...过滤掉一个abc
		 */
		public static function dist(org:String):String
		{
			var map:Array=[];
			var re:Array=[];
			var array:Array=org.split(",");
			for (var i:int=0; i < array.length; i++)
			{
				if (!map[array[i]])
				{
					map[array[i]]=1;
					re.push(array[i]);
				}
			}
			return re.join(",");
		}

		/**
		 * 检测程序是否是第一次运行
		 * 返回boolean类型
		 * NativeApplication.nativeApplication.applicationDescriptor
		 */
		public static function isFirstRun(appXml:XML):Boolean
		{
			//读取应用程序信息，获取当前程序版本			
			var appXml:XML=appXml;
			var ns:Namespace=appXml.namespace();
			var appId:String=appXml.ns::id[0];
			var appVersion:String=appXml.ns::version[0];
			var appName:String=appXml.ns::filename[0];
			var currentVersion:String=appVersion;

			//通过文件方式记录当前应用程序版本
			var file:File=new File(File.applicationDirectory.resolvePath("app:/config/version.txt").nativePath);
			var stream:FileStream=new FileStream();
			if (file.exists)
			{
				//文件存在时检测是否与当前应用程序版本一致，如果一致则不是第一次运行
				stream.open(file, FileMode.READ);
				stream.open(file, FileMode.READ);
				var reversion:String=stream.readUTFBytes(stream.bytesAvailable);
				stream.close();
				if (reversion != currentVersion)
				{
					//新版本第一次运行
					return true;
				}
				else
				{
					//保存文件
					stream=new FileStream();
					stream.open(file, FileMode.WRITE);
					stream.writeUTFBytes(currentVersion);
					stream.close();
					//不是第一次运行
					return false;
				}
			}
			else
			{
				//保存文件
				stream=new FileStream();
				stream.open(file, FileMode.WRITE);
				stream.writeUTFBytes(currentVersion);
				stream.close();
				//第一次运行
				return true;
			}
		}

		/**
		 * 获取当前机器的屏幕
		 */
		public static function getCurrentScreen(rec:Rectangle):Screen
		{
			if (rec == null)
				return Screen.mainScreen;
			else
			{
				var current:Screen=null;
				var screens:Array=Screen.getScreensForRectangle(rec);
				(screens.length > 0) ? current=screens[0] : current=Screen.mainScreen;
				return current;
			}
		}

		/**
		 * 截取字符串，中文按双字节处理
		 */
		public static function checkLength(str:String, length:int):String
		{
			var index:int=0;
			var len:int=0;
			for (var i:int=0; i < str.length; i++)
			{
				if (len - 1 >= length)
					return str.substring(0, index - 1);
				if (len >= length)
					return str.substring(0, index);
				if (str.charCodeAt(i) > 255)
					len+=2;
				else
					len++;
				index++;
			}
			return str;
		}

		/**
		 * 解析XML返回指定节点的值
		 */
		public static function getXmlItem(path:String, xpath:String):String
		{
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			var fs:FileStream=new FileStream();
			fs.open(file, FileMode.READ);
			var xml:XML=new XML(fs.readUTFBytes(fs.bytesAvailable));
			//拆分xpath
			var xpathArray:Array=xpath.split("/");
			var xmlNode:XMLList=null;
			for (var i:int=0, len:int=xpathArray.length; i < len; i++)
			{
				if (xmlNode)
					xmlNode=xmlNode.child(xpathArray[i]);
				else
					xmlNode=xml.child(xpathArray[i]);
			}
			fs.close();
			return xmlNode[0].toString();
		}

		/**
		 *  解析XML返回指定节点
		 */
		public static function getXmlNode(path:String, xpath:String):XMLList
		{
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			var fs:FileStream=new FileStream();
			fs.open(file, FileMode.READ);
			var xml:XML=new XML(fs.readUTFBytes(fs.bytesAvailable));
			//拆分xpath
			var xpathArray:Array=xpath.split("/");
			var xmlNode:XMLList=null;
			for (var i:int=0, len:int=xpathArray.length; i < len; i++)
			{
				if (xmlNode)
					xmlNode=xmlNode.child(xpathArray[i]);
				else
					xmlNode=xml.child(xpathArray[i]);
			}
			fs.close();
			return xmlNode;
		}
	}
}
